2017-05-20 16:29:04
数据可视化(Data Visualization): 将抽象的科学或者商业数据用图像表示出来,帮助理解数据的意义的过程。可视化并不独立于分析过程,两者往往相伴、迭代推进。
为什么要做可视化? 图形传达信息的效率更高
变量映射(数据==>可视化结果)的过程就是视觉编码(visual encoding)。
作图前的数据准备: 各个变量分别映射到哪个视觉通道(visual channel)上?通常,
x
变量映射到x轴或角度y
变量映射到y轴或半径group
变量映射到分组
通道 | 分类数据 Categorical | 有序数据 Ordinal | 定量数据 Quantitative |
---|---|---|---|
位置 position | |||
长度 length | |||
亮暗 luminance | |||
纹理 texture | |||
颜色 color | |||
角度 angle | |||
形状 shape |
(Jacques Bertin, 1967)
序号 | 分类数据 | 有序数据 | 定量数据 |
---|---|---|---|
1 | |||
2 | |||
3 | |||
4 | |||
5 | |||
6 | |||
7 |
序号 | 分类数据 | 有序数据 | 定量数据 |
---|---|---|---|
8 | |||
9 | |||
10 | |||
11 | |||
12 | |||
13 |
by Mackinlay, Automating the Design of Graphical Presentations of Relational Information, 1986
by Mackinlay, Tversky, & E. Tufte
颜色系统 | 黑 | 灰 | 天蓝 | 番茄 | |
---|---|---|---|---|---|
色名 | 文本, 颜色名字 | "black" | "gray" | "skyblue" | "tomato" |
RGB空间 | 向量, rgb(Red, Green, Blue, <Alpha>) |
rgb(0, 0, 0) | rgb(190, 190, 190, max=255) | rgb(135, 206, 235, max=255) | rgb(255, 99, 71, max=255) |
HCL空间 | Hex文本, "#Hue Chroma Luminance <Transparency>" |
#000000FF | #BEBEBEFF | #86CEEBFF | #FF6347FF |
HSV空间 | 向量, hsv(Hue, Saturation, Value, <Tranparency>) |
hsv(0, 0, 0) | hsv(0, 0, 0.74510) | hsv(0.548, 0.426, 0.922) | hsv(0.025, 0.722, 1) |
colorspace
包,或
> col2hcl("pink") [1] "#FFC0CBFF"
col2rgb
> col2rgb("pink") [,1] red 255 green 192 blue 203
rgb2hsv
> rgb2hsv(255, 190, 77, max=255) [,1] h 0.1058052 s 0.6980392 v 1.0000000
grDevices
包中
colors()
demo(colors)
展示内建颜色各种效果rgb
: R, G, B, A均可0-1或0-255hsv
: H, S, V, A均可0-1或0-255hcl
颜色编码library(scales) show_col(c("#7AC143", "#7D3F98", "#F47721", "#D20962", "#00A78E", "#00BCE4"))
show_col(c(rgb(1, 1, 1), rgb(0.5, 0, 0), rgb(0, 0.5, 0), hsv(0, 0, 0.5), hsv(1, 0.5, 1), hsv(0.5, 1, 0.5)))
grDevices
包中的gray()
> gray(c(0.1, 0.5, 0.8)) # 取灰度0.1, 0.5, 0.8 [1] "#1A1A1A" "#808080" "#CCCCCC" # 返回hcl值
colorRamp()
和colorRampPalette()
: 生成色阶定义函数> pal <- colorRamp(c("red", "green", "violet")) # 定义色阶 > pal(c(0.4, 0.75)) # 在该色阶上取0.4, 0.75分位 [,1] [,2] [,3] # 三列分别代表红、绿、蓝 [1,] 51 204.0 0 # 两行分别代表0.4和0.75分位 [2,] 119 192.5 119 > pal <- colorRampPalette(c("red", "green", "violet")) # 定义同样的色阶 > pal(5) # 自动从色阶中等距取5种颜色,返回hcl值 [1] "#FF0000" "#7F7F00" "#00FF00" "#77C077" "#EE82EE"
RColorBrewer
包display.brewer.all()
brewer.pal.info
library(RColorBrewer) cols <- brewer.pal(n=3, name="RdYlGn") cols
## [1] "#FC8D59" "#FFFFBF" "#91CF60"
scales::show_col(cols)
pal <- colorRampPalette(cols) image(volcano, col = pal(20))
Thank you!